# Create your views here.

from django.contrib.auth import authenticate,login, user_logged_in
from Classi180.classificados.models import Anuncio, Categoria, Cidade, Imagem, SubCategoria, Usuario,\
    TagBusca
from Classi180.Blog.models import Noticias, Galeria
from django import forms
from django.conf import settings
from django.contrib import comments
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.core.mail import send_mail
from django.views.decorators.csrf import csrf_protect, csrf_exempt
from django.core.mail import EmailMessage
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext, Context, loader
from datetime import date
from django.contrib.auth import authenticate, logout, login as authlogin
from django.core import serializers
from Classi180.classificados.forms import CadastroForm, AnuncioForm
from django.contrib.auth.decorators import login_required
from PIL import Image
from Classi180.settings import MEDIA_ROOT
from django.contrib.comments.models import Comment
import datetime
from warnings import catch_warnings
from test.test_warnings import CatchWarningTests

from django.db.models.sql.query import Query
from django.db.models.query import QuerySet
from django.contrib.auth.models import User
from django.contrib.sessions.models import Session


def home(request):
    categorias = Categoria.objects.all()
    ultimos = Anuncio.objects.all().order_by('-dataCadastro')[:3]
    acessados = Anuncio.objects.all().order_by('-quantidadeAcesso')[:4]
    destaques = Anuncio.objects.filter(status__exact=3)[:7]
    tags = TagBusca.objects.all().order_by('-quantidade')[:7]
    data = date.today()
    noticias = Noticias.objects.all().order_by('-publicacao')[:2]
    subCategoriaProduto = SubCategoria.objects.filter(categoria__exact=1)
    subCategoriaVeiculo = SubCategoria.objects.filter(categoria__exact=2)
    subCategoriaImoveis = SubCategoria.objects.filter(categoria__exact=3)
    subCategoriaNegocio = SubCategoria.objects.filter(categoria__exact=4)
    #sessao = Session.objects.get(session_key = request.COOKIES['sessionid'])
    return render_to_response('index.html', locals(), context_instance=RequestContext(request))

@csrf_protect
def anuncio(request, anuncio_id):
    
    anuncio = Anuncio.objects.get(id = anuncio_id)
    usuario = Usuario.objects.get(id = anuncio.usuario.id)
    imagens = Imagem.objects.filter(anuncio__exact = anuncio_id)
    anuncios = usuario.anuncio_set.exclude(id__exact = anuncio_id)[:2]
    destaques = Anuncio.objects.filter(status__exact=2)[:7]
    noticias = Noticias.objects.all().order_by('-publicacao')[:10]
    anuncio.quantidadeAcesso = anuncio.quantidadeAcesso + 1
    anuncio.save()
    usuario.quantidadeAcesso = usuario.quantidadeAcesso + 1
    usuario.save()
    comentariosAnuncio = Comment.objects.filter(content_type__exact = 14).filter(object_pk__exact = anuncio_id)
    coments = []
    for coment in comentariosAnuncio:
        comentComent = Comment.objects.filter(content_type__exact = 20).filter(object_pk__exact = coment.id)
        coments.append(comentComent)
    
    if request.method == 'POST':
        comentario = Comment(content_type_id = 14, object_pk = anuncio_id, site_id = 2, user_id = request.user.id, user_name = request.user.username, user_email = request.user.email, comment = request.POST['comentText'], submit_date = datetime.date.today(), is_public = 1, is_removed = 0)
        comentario.save()
        
    return render_to_response('produto.html', locals(), context_instance=RequestContext(request))


def perfil(request, usuario_id):
    
    usuario = Usuario.objects.get(id = usuario_id)
    anuncios = Anuncio.objects.filter(usuario__exact=usuario_id)
    ultimos = Anuncio.objects.all().order_by('-dataCadastro')[:3]
    noticias = Noticias.objects.all().order_by('-publicacao')[:3]
    quantidadeAnuncios = anuncios.count()
    usuario.quantidadeAcesso = usuario.quantidadeAcesso + 1
    usuario.save()
        
    return render_to_response('perfil.html', locals(), context_instance=RequestContext(request))


def listar(request, categoria_id):    
    anunciosCategoria = Anuncio.objects.filter(categoria__exact = categoria_id)
    categoria = Categoria.objects.get(id = categoria_id)
    subcategorias = categoria.subcategoria_set.all()
    quantidadeCategoria = anunciosCategoria.count()
    listagemSub = []
    quantidadeSub = []
    for sub in subcategorias:
        queryAtual = anunciosCategoria.filter(subcategoria__exact = sub)
        listagemSub.append(queryAtual)
        quantidadeSub.append(queryAtual.count())
    
    destaques = Anuncio.objects.filter(status__exact=3)[:7]
    
    return render_to_response('listagem.html', locals(), context_instance=RequestContext(request))

def busca(request):
    if request.method == 'GET':
        tagg = request.GET['busca']
        try:
            buscaObjeto = TagBusca.objects.get(tag = tagg)
        except:
            buscaObjeto = TagBusca(tag = tagg)
            
        buscaObjeto.quantidade = buscaObjeto.quantidade + 1
        buscaObjeto.save()
        anuncios = Anuncio.objects.filter(descricao__icontains = tagg)
        quantidadeBusca = anuncios.count()
        destaques = Anuncio.objects.filter(status__exact=3)[:7]
    
    return render_to_response('resultadoBusca.html', locals(), context_instance=RequestContext(request))

@csrf_protect
def anunciar(request):
    if request.method == 'POST':
        categoriaAnuncio = Categoria.objects.get(id = request.POST['categoria'])
        request.POST['categoria'] = categoriaAnuncio
        form = CadastroForm(request.POST, request.FILES)
        if form.is_valid():
            novo_anuncio = form.save()
            return render_to_response('index.html',locals(), context_instance=RequestContext(request))
    else:
        categorias = Categoria.objects.all()
        subcategorias = SubCategoria.objects.all()
        msg = "Ocorreu um erro!"
        form = CadastroForm()
        return render_to_response('anunciar.html', locals(), context_instance=RequestContext(request))
    
@csrf_protect
def anuncia(request):
    if request.method == 'POST':
        print request.POST
        categoriaAnuncio = Categoria.objects.get(id = request.POST['categoria'])
        subcategoriaAnuncio = SubCategoria.objects.get(id = request.POST['subcategoria'])
        if request.user.id:
            try:
                usuarioAnuncio = Usuario.objects.get(email = request.user.email)
            except:
                usuarioAnuncio = Usuario.objects.get(nome = request.user.username)
            anuncioNovo = Anuncio(categoria = categoriaAnuncio, subcategoria = subcategoriaAnuncio, usuario = usuarioAnuncio, cidade = usuarioAnuncio.cidade, descricao = request.POST['descricao'], tipo = request.POST['tipo'], detalhes = request.POST['detalhes'], preco = request.POST['preco'],video = request.POST['video'],foto = request.FILES['foto'])
        else:
            anuncioNovo = Anuncio(categoria = categoriaAnuncio, subcategoria = subcategoriaAnuncio, descricao = request.POST['descricao'], tipo = request.POST['tipo'], detalhes = request.POST['detalhes'], preco = request.POST['preco'],video = request.POST['video'],foto = request.FILES['foto'])
        
        anuncioNovo.save()
        anuncioThumb = Anuncio.objects.latest('id')
        extensao = anuncioThumb.foto.name.split('.')[-1]
        anuncioThumb.thumbnail = 'anuncio/%s/%s/%s.%s'%(
               anuncioThumb.categoria.id,anuncioThumb.subcategoria.id,anuncioThumb.id, extensao)

        miniatura = Image.open(anuncioThumb.foto.path)
        miniatura.thumbnail((150,100), Image.ANTIALIAS)
        string = MEDIA_ROOT+''+'/'+anuncioThumb.thumbnail.name
        miniatura.save(string)
        anuncioThumb.save()
        return HttpResponseRedirect('/home/')
    else:
        categorias = Categoria.objects.all()
        subcategorias = SubCategoria.objects.all()
        form = CadastroForm()
        return render_to_response('anunciar.html', locals(), context_instance=RequestContext(request))

@csrf_protect
def login(request):
    if request.user.is_authenticated():
        attrEmail = request.user.email
        usuario = Usuario.objects.get(email = attrEmail)
        anuncios = Anuncio.objects.filter(usuario__exact=usuario)
        quantidadeAnuncio = anuncios.count()
        ultimos = Anuncio.objects.all().order_by('-dataCadastro')[:3]
        noticias = Noticias.objects.all().order_by('-publicacao')[:3]
        return render_to_response('meu_perfil.html', locals(), context_instance=RequestContext(request))
    
    if request.POST:
        emailUser = request.POST['username']
        senhaUser = request.POST['password']
        u = authenticate(username=emailUser, password=senhaUser)
        if u is not None:
            if u.is_active:
                authlogin(request, u)
                try:
                    usuario = Usuario.objects.get(email = u.email)
                except:
                    usuario = Usuario.objects.get(nome = u.username)
                anuncios = Anuncio.objects.filter(usuario__exact=usuario)
                quantidadeAnuncio = anuncios.count()
                ultimos = Anuncio.objects.all().order_by('-dataCadastro')[:3]
                noticias = Noticias.objects.all().order_by('-publicacao')[:3]
                return render_to_response('meu_perfil.html', locals(), context_instance=RequestContext(request))
        else:
            return HttpResponseRedirect('/home/')
    return render_to_response('meu_perfil.html', locals(), context_instance=RequestContext(request))


@login_required
def meusAnuncios(request, usuario_id):
    
    anuncios = Anuncio.objects.filter(usuario__exact=usuario_id)
    usuario = Usuario.objects.get(id = usuario_id)
    quantidadeAnuncio = anuncios.count()
    ultimos = Anuncio.objects.all().order_by('-dataCadastro')[:3]
    noticias = Noticias.objects.all().order_by('-publicacao')[:3]
    
    return render_to_response('meus_anuncios.html', locals(), context_instance=RequestContext(request))

def mensagens(request, usuario_id):
    
    return render_to_response('mensagem.html', locals(), context_instance=RequestContext(request))

def minhasmensagens(request, usuario_id):
    
    usuario = Usuario.objects.get(id = usuario_id)
    anuncios = Anuncio.objects.filter(usuario__exact=usuario_id)
    ultimos = Anuncio.objects.all().order_by('-dataCadastro')[:3]
    noticias = Noticias.objects.all().order_by('-publicacao')[:3]
    ids = anuncios.values_list('id', flat = True)
    comentarios = []
    users = []
    quantidadeNaoLida = 0
    for anuncio in ids:
        print anuncio
        comentario = Comment.objects.filter(content_type__exact = 14).filter(object_pk__exact = anuncio).order_by('-id')[:1]
        #co = comentario.values_list('user',flat=True)
        #use = User.objects.get(id__contains = co)
        #FotoUsuario = Usuario.objects.get(email = use.email)
        if comentario:
            comentarios.append(comentario)
            #users.append(FotoUsuario)
    return render_to_response('minhas_mensagens.html', locals(), context_instance=RequestContext(request))


def contatar(request, usuario_id):
    
    if request.mothod == 'POST':
        email = Usuario.objects.get(id = usuario_id).email
        html_content = request.POST['content']
        msge = EmailMessage('Classi180 tem mensagem para voce!',html_content,'caioguri@gmail.com', [email, ] )
        msge.content_subtype = "html"
        msge.send()

def get_subcategoria(request):
    subCategorias = SubCategoria.objects.all()
    retorno = serializers.serialize("json",  subCategorias)
    return HttpResponse(retorno, mimetype="text/javascript")

